// 先导入fs模块
const fs = require("fs");
const koajwt = require("koa-jwt")({ secret: "xion_secret" }).unless({
  path: [/\/register/, /\/login/],
});

function addMapping(router, mapping) {
  for (var url in mapping) {
    if (url.startsWith("GET ")) {
      var path = url.substring(4);
      router.get(path, koajwt, mapping[url]);
      console.log(`register URL mapping: GET ${path}`);
    } else if (url.startsWith("POST ")) {
      var path = url.substring(5);
      router.post(path, koajwt, mapping[url]);
      console.log(`register URL mapping: POST ${path}`);
    } else if (url.startsWith("PUT ")) {
      var path = url.substring(4);
      router.put(path, koajwt, mapping[url]);
      console.log(`register URL mapping: PUT ${path}`);
    } else if (url.startsWith("DELETE ")) {
      var path = url.substring(7);
      router.delete(path, koajwt, mapping[url]);
      console.log(`register URL mapping: DELETE ${path}`);
    } else {
      console.log(`invalid URL: ${url}`);
    }
  }
}

function addControllers(router) {
  // 用readdirSync列出文件
  var files = fs.readdirSync(__dirname + "/controllers");
  var js_files = files.filter((f) => {
    return f.endsWith(".js");
  });

  for (var f of js_files) {
    console.log(`process controller: ${f}...`);
    let mapping = require(__dirname + "/controllers/" + f);
    addMapping(router, mapping);
  }
}

// addControllers(router);
module.exports = function (dir) {
  let controllers_dir = dir || "controllers", // 如果不传参数，扫描目录默认为'controllers'
    router = require("koa-router")();
  addControllers(router, controllers_dir);
  return router.routes();
};
